package com.wms.code;

import com.wms.code.constant.ArrivalConstant;
import com.wms.code.utils.DateUtils;

/**
 * 调拨单号生成策略
 */
public class ArrivalStrategy implements WmsCode {
    private final String prefix;

    // 构造方法接受前缀参数
    public ArrivalStrategy(String prefix) {
        this.prefix = prefix;
    }

    @Override
    public String generate(String currentCode) {
        // 获取系统时间
        String ym = DateUtils.getYM();

        // 如果为空，生成当月第一个编码
        if (null == currentCode || "".equals(currentCode)) {
            return prefix + ym + ArrivalConstant.DEFAULT_SEQ;
        }

        // 如果不为空，判断指定编码与当前系统时间是否同年月
        // 获取指定编码年月
        int begin = prefix.length();
        String tmp = currentCode.substring(begin, begin + 4);
        // 如果不是同一年月，产生新的编码
        if (!ym.equals(tmp)) {
            return prefix + ym + ArrivalConstant.DEFAULT_SEQ;
        }

        // 获取序号 DH2508001
        begin = currentCode.length() - ArrivalConstant.DEFAULT_SEQ.length();
        String seq = currentCode.substring(begin);
        int num = Integer.parseInt(seq);
        num++;
        return prefix + ym + String.format("%0" + ArrivalConstant.DEFAULT_SEQ.length() + "d", num);
    }
}
